<template>
    <div class="main">
        <div style="width: 100%;height: 0.8vh;"></div>
        <div style="position: relative;height: 5vh;width: 97%;
        margin-left: 1.8%;box-shadow: 0px 0px 1px 1PX rgb(242, 240, 240);
        display: flex;align-items: center;">
            <el-button icon="el-icon-back" plain type="primary" @click="returnRoles()">返回</el-button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            角色名字 &nbsp;<el-input placeholder="请输入内容" prefix-icon="el-icon-search" v-model="serchMapUserRole.roleNameLike"
                clearable style="width: 10vw;">&nbsp;</el-input>&nbsp;
            <el-button icon="el-icon-search" plain type="primary" @click="SerchMore">查询</el-button>
        </div>
        <div style="width: 100%;height: 0.8vh;"></div>
        <div style="position: relative;width: 98%;
        margin-left: 1.8%;box-shadow: 0px 0px 1px 1PX rgb(242, 240, 240);
        display: flex;align-items:flex-star t;height: 80vh;display: flex;">

            <div
                style="position: relative;width: 25%;height: 100%;display: flex;justify-content: center;align-items: center;">
                <div style="position: relative;width: 94%;height: 99%;">
                    <el-tree :data="listUserRole" node-key="role_id" default-expand-all :props="defaultProps">
                        <span class="custom-tree-node" slot-scope="{ node, data }">
                            <span>{{ node.label }}</span>
                            &nbsp;&nbsp;&nbsp;&nbsp;
                            <span v-if="node.data.role_id != 0">
                                <el-button type="text" size="mini" style="color: rgb(255, 0, 0);"
                                    @click="() => remove(node, data)">
                                    Delete
                                </el-button>
                            </span>
                        </span>
                    </el-tree>
                </div>
            </div>

            <div style="position: relative;width: 75%;height: 70vh;">
                <div style="position: relative;width: 100%;height: 70vh;position: relative;overflow-y: scroll;">
                    <el-table :data="listRole" tooltip-effect="dark" row-key="roleId" :header-cell-class-name="cellClass">
                        <el-table-column width="60" :show-overflow-tooltip="true">
                            <template v-slot="scope">
                                <el-checkbox :true-label="getVuexsUserID" :false-label="null" v-model="scope.row.user_id"
                                    size="medium" @change="handleCheckedCitiesChange(scope.row)"></el-checkbox>
                            </template>
                        </el-table-column>
                        <el-table-column prop="roleName" label="角色名字" width="190" :show-overflow-tooltip="true">
                        </el-table-column>
                        <el-table-column prop="roleDescription" label="角色描述" width="300" :show-overflow-tooltip="true">
                        </el-table-column>
                    </el-table>
                </div>
                <!--分页-->
                <el-pagination @size-change="sizeData" @current-change="pageData" :page-sizes="[10, 20]" :page-size="5"
                    layout="total, sizes, prev, pager, next, jumper" :total="count">
                </el-pagination>
            </div>

        </div>



    </div>
</template>
  
<script>
import RoleAndRoleApi from '@/api/userzandrolezRequest.js'

export default {
    // 组件名称
    name: 'userrole',
    // 组件参数 接收来自父组件的数据
    props: {},
    // 局部注册的组件
    components: {},
    // 组件状态值
    data() {
        return {
            //存放用户角色
            listUserRole: [{
                role_id: 0,
                roleName: '用户当前的角色',
                children: [],
            }],
            //用户角色树展示
            defaultProps: {
                children: 'children',
                label: 'roleName'
            },
            //查询用户角色权限
            serchMapUserRole: {
                user_id: 0,
                roleNameLike: null,
                pageNum: 1,
                pageSize: 10,
            },
            //存放用户角色权限
            listRole: [],
            //存放角色有多少个
            count: 10,
        }
    },
    // 计算属性
    computed: {
        //获取用户ID
        getVuexsUserID() {
            return this.$store.getters['manageuser/getdisplayUserID'];
        },

    },
    // 侦听器
    watch: {

    },
    // 组件方法
    methods: {
        //返回用户信息页面
        returnRoles() {
            this.$store.commit("manageuser/insertdisplayUserDemo", 'userinfor');
        },
        //查询数量
        fetchData() {
            // 编写一个方法请求后端的接口，把返回的数据赋值list
            RoleAndRoleApi.selectUserRole(this.getVuexsUserID).then(response => {
                //把返回的结果赋值模型        
                this.listUserRole[0].children = response.data;
            });
            this.serchMapUserRole.user_id = this.getVuexsUserID;
            RoleAndRoleApi.selectUserRoleTWO(this.serchMapUserRole).then(response => {
                this.listRole = response.data.data;
                this.count = response.data.total;
            })
        },//查询更多
        SerchMore() {
            if (this.serchMapUserRole.roleNameLike == '') this.serchMapUserRole.roleNameLike = null;
            this.serchMapUserRole.pageNum = 1;
            this.serchMapUserRole.pageSize = 10;
            this.fetchData();
        },
        //// 备注：cellClass()方法主要给复选框那一列添加 类名为 ‘disabledCheck’
        cellClass(row) {
            if (row.columnIndex === 0) {
                return 'disabledCheck'
            }
        },
        //当分页大小产生变化的时候调用该方法
        sizeData(size) {
            this.serchMapUserRole.pageSize = size - 1
            this.fetchData()
        },
        pageData(page) {
            this.serchMapUserRole.pageNum = page
            this.fetchData()
        },
        // 改变一个选项状态时
        handleCheckedCitiesChange(value) {
            let obj = {
                user_id: this.getVuexsUserID,
                role_id: value.role_id
            }
            if (value.user_id == null) {
                RoleAndRoleApi.deleteUserRole(obj).then(res => {
                    this.fetchData();
                })

            } else {
                RoleAndRoleApi.insert(obj).then(res => {
                    this.fetchData();
                })
            }
        },
        //删除用户权限
        remove(node, data) {
            let obj = {
                user_id: this.getVuexsUserID,
                role_id: node.data.role_id
            };
            RoleAndRoleApi.deleteUserRole(obj).then(res => {
                this.fetchData();
            })
        }

    },
    // 以下是生命周期钩子   注：没用到的钩子请自行删除
    /**
    * 在实例初始化之后，组件属性计算之前，如data属性等
    */
    beforeCreate() {
    },
    /**
    * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
    */
    created() {
        this.fetchData();
    },
    /**
    * 在挂载开始之前被调用：相关的 render 函数首次被调用。
    */
    beforeMount() {

    },
    /**
    * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
    * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
    */
    mounted() {
    },
    /**
    * 数据更新时调用，发生在虚拟 DOM 重新渲染和打补丁之前。
    * 你可以在这个钩子中进一步地更改状态，这不会触发附加的重渲染过程。
    */
    beforeUpdate() {
    },
    /**
    * 由于数据更改导致的虚拟 DOM 重新渲染和打补丁，在这之后会调用该钩子。
    * 当这个钩子被调用时，组件 DOM 已经更新，所以你现在可以执行依赖于 DOM 的操作。
    */
    updated() {
    },
    /**
    * keep-alive 组件激活时调用。 仅针对keep-alive 组件有效
    */
    activated() {
    },
    /**
    * keep-alive 组件停用时调用。 仅针对keep-alive 组件有效
    */
    deactivated() {
    },
    /**
    * 实例销毁之前调用。在这一步，实例仍然完全可用。
    */
    beforeDestroy() {
    },
    /**
    * Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，
    * 所有的事件监听器会被移除，所有的子实例也会被销毁。
    */
    destroyed() {
    }
}
</script> 
  
  
<style scoped >
/* // 深度选择器 去掉全选按钮 */
</style>
  